1
程式即資料:Elixir 的同源性本質
AI019Lesson 10
00:00

同源性的本質

同源語言:一種其內部表示形式以自身語言表達的語言。在 Elixir 中,原始碼不僅僅是文字;它是一種稱為「抽象語法樹(AST)」的巢狀資料結構。 抽象語法樹(AST)

1. 表示的邏輯規則

Elixir 透過將基本字面量直接以自身形式表示,簡化了抽象語法樹(AST)。原子、數值、列表(包含關鍵字列表)、二進位資料以及兩元素元組,在內部表示時不會有複雜的包裝。

iex> quote do: [do: 1]
[do: 1]
iex> quote do: "binaries"
"binaries"

2. 抽象語法樹的元組結構

大多數程式碼轉換都會產生一個三元素元組: {函數名稱, 元數據, 參數}。例如,一個函數呼叫如 1 + 2 會變成 {:+, [line: 1], [1, 2]}。這使得語言能夠將 程式視為資料

3. 宏:延遲執行

宏是「一種透過將程式碼重新注入程式內部表示中,來延遲執行條件區塊的方式。」與標準函數在呼叫前先評估參數不同,宏接收的是 之前 呼叫時,宏接收的是 原始的抽象語法樹(AST),從而可在編譯前進行邏輯注入。

$$\text{原始碼} \xrightarrow{\text{quote}} \text{AST 元組} \xrightarrow{\text{宏}} \text{轉換後的 AST}$$

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>